home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
c
/
rdcf.exe
/
RDCF2.H
< prev
Wrap
C/C++ Source or Header
|
1993-01-15
|
5KB
|
198 lines
/*-----------------------------------------------------------------------------
RDCF: A Reentrant DOS-Compatible File System, Version 2.0
by Philip J. Erdelsky
CompuServe 75746,3411
InterNet 75746.3411@compuserve.com
September 15, 1992
Copyright (c) 1992 Philip J. Erdelsky
-----------------------------------------------------------------------------*/
#ifndef _RDCF
#define _RDCF
#include <setjmp.h>
/* #define RDCF_SYSTEM_READ_ONLY */
#define RDCF_MULTIPLE_DRIVE
#define RDCF_SECTOR_SIZE 512
struct rdcf_date_and_time
{
unsigned char second;
unsigned char minute;
unsigned char hour;
unsigned char day;
unsigned char month;
unsigned short year;
};
struct rdcf_file_information
{
unsigned char spec[13];
unsigned char attribute;
#define RDCF_READ_ONLY 0x01
#define RDCF_HIDDEN 0x02
#define RDCF_SYSTEM 0x04
#define RDCF_VOLUME 0x08
#define RDCF_DIRECTORY 0x10
#define RDCF_ARCHIVE 0x20
struct rdcf_date_and_time date_and_time;
unsigned short first_cluster;
unsigned long size;
};
/* FCB (File Control Block) */
struct rdcf
{
/* values that must be initialized by the calling program */
unsigned char *buffer;
unsigned (*drive_access)(int, unsigned, unsigned, void *);
/* file information */
struct rdcf_file_information file;
/* result codes */
unsigned long position;
unsigned short drive_error;
short result;
/* file system information */
unsigned char drive;
#ifndef RDCF_SECTOR_SIZE
unsigned short sector_size;
#endif
unsigned short first_FAT_sector;
unsigned short sectors_per_FAT;
unsigned short first_directory_sector;
unsigned short first_data_sector;
unsigned short sectors_per_cluster;
unsigned short maximum_cluster_number;
unsigned short last_cluster_mark;
/* internal use only */
#ifndef RDCF_SYSTEM_READ_ONLY
unsigned char mode;
#endif
unsigned short directory_first_cluster;
unsigned short directory_cluster;
unsigned short directory_index;
unsigned char buffer_status;
unsigned short cluster;
unsigned short last_cluster;
unsigned short sector_in_buffer;
jmp_buf error;
};
struct rdcf_format
{
unsigned char x[19];
};
/* error codes */
#define RDCF_ACCESS_DENIED (-1)
#define RDCF_DIRECTORY_CONFLICT (-2)
#define RDCF_DIRECTORY_FULL (-3)
#define RDCF_DISK_FORMAT_ERROR (-4)
#define RDCF_DRIVE_ERROR (-5)
#define RDCF_FILE_FORMAT_ERROR (-6)
#define RDCF_INVALID_DIRECTORY (-7)
#define RDCF_INVALID_SPEC (-8)
#define RDCF_MODE_ERROR (-9)
#define RDCF_FILE_NOT_FOUND (-10)
#define RDCF_RENAMING_ERROR (-11)
#define RDCF_SEEK_OUT_OF_RANGE (-12)
#define RDCF_UNRECOVERABLE_FILE (-13)
/* prototype for function defined in application */
void rdcf_get_date_and_time(struct rdcf_date_and_time *);
/* formatting types */
#ifndef RDCF_SYSTEM_READ_ONLY
extern struct rdcf_format rdcf_format_360;
extern struct rdcf_format rdcf_format_720;
extern struct rdcf_format rdcf_format_1200;
extern struct rdcf_format rdcf_format_1440;
#endif
/* modes for rdcf_open() */
#ifndef RDCF_SYSTEM_READ_ONLY
#define RDCF_CREATE 0
#define RDCF_READ 1
#define RDCF_READ_WRITE 2
#endif
/* modes for rdcf_sort_directory() */
#ifndef RDCF_SYSTEM_READ_ONLY
#define RDCF_EXTENSION_NAME 0
#define RDCF_NAME_EXTENSION 1
#define RDCF_DATE_TIME 2
#define RDCF_SIZE 3
#define RDCF_REVERSE 8
#endif
/* prototypes for functions defined in RDCF */
#ifdef RDCF_SYSTEM_READ_ONLY
int rdcf_open(struct rdcf *, char *);
#else
int rdcf_attribute(struct rdcf *, char *, unsigned);
int rdcf_close(struct rdcf *);
int rdcf_date_and_time(struct rdcf *, char *, struct rdcf_date_and_time *);
int rdcf_delete(struct rdcf *, char *);
int rdcf_directory(struct rdcf *, char *);
int rdcf_format(struct rdcf *,
#ifdef RDCF_MULTIPLE_DRIVE
char *,
#endif
struct rdcf_format *);
int rdcf_move(struct rdcf *, char *, char *);
int rdcf_open(struct rdcf *, char *, unsigned);
int rdcf_recover(struct rdcf *, char *);
int rdcf_rename(struct rdcf *, char *, char *);
int rdcf_set_file_information(struct rdcf *, char *, unsigned,
struct rdcf_file_information *);
int rdcf_set_volume(struct rdcf *, char *);
int rdcf_sort_directory(struct rdcf *, char *, int);
int rdcf_undelete(struct rdcf *, char *);
int rdcf_wipe_drive(struct rdcf *
#ifdef RDCF_MULTIPLE_DRIVE
, char *
#endif
);
int rdcf_write(struct rdcf *, void *, int);
#endif
int rdcf_get_file_information(struct rdcf *, char *, unsigned);
int rdcf_next_file_information(struct rdcf *);
int rdcf_get_volume(struct rdcf *
#ifdef RDCF_MULTIPLE_DRIVE
, char *
#endif
);
long rdcf_free_space(struct rdcf *
#ifdef RDCF_MULTIPLE_DRIVE
, char *
#endif
);
int rdcf_match(char *, char *);
int rdcf_read(struct rdcf *, void *, int);
int rdcf_seek(struct rdcf *, unsigned long);
#endif